"""
项目配置管理模块 - 简化版
只需要维护config.toml文件，简单直接
"""

import os
from typing import Any

import toml


def load_config(file_path: str = None) -> dict[str, Any]:
    """
    读取 TOML 配置文件并返回配置字典

    Args:
        file_path: 配置文件路径，默认为当前目录下的config.toml
    Returns:
        dict: 配置字典
    """
    if file_path is None:
        file_path = os.path.join(os.path.dirname(__file__), "config.toml")

    try:
        with open(file_path, encoding='utf-8') as f:
            return toml.load(f)
    except FileNotFoundError:
        print(f"错误：找不到配置文件 {file_path}")
        return {}
    except toml.TomlDecodeError as e:
        print(f"错误：配置文件解析失败 - {e}")
        return {}


class ConfigDict(dict):
    """
    支持点号访问的配置字典
    例如: config.database.db_name 等价于 config['database']['db_name']
    """
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 将嵌套字典也转换为ConfigDict
        for key, value in self.items():
            if isinstance(value, dict):
                self[key] = ConfigDict(value)

    def __getattr__(self, key):
        try:
            return self[key]
        except KeyError:
            raise AttributeError(f"配置项 '{key}' 不存在")

    def __setattr__(self, key, value):
        self[key] = value


# 加载配置
_config_data = load_config()
setting_config = ConfigDict(_config_data)


# 使用示例和测试
if __name__ == "__main__":
    print("=== 配置加载测试 ===")

    app_config = setting_config.get('app', {})
    print(f"应用名称: {app_config.get('name', 'N/A')}")
    print(f"应用端口: {app_config.get('port', 8000)}")

    # 方式1：字典访问
    print("字典访问方式：")
    db_config = setting_config.get('database', {})
    print(f"数据库文件: {db_config.get('db_name', 'N/A')}")

    # 方式2：点号访问
    print("\n点号访问方式：")
    try:
        print(f"数据库文件: {setting_config.database.db_name}")
        print(f"应用名称: {setting_config.app.name}")
        print(f"应用端口: {setting_config.app.port}")
        print(f"Coze API Key: {setting_config.coze.api_key}")
    except AttributeError as e:
        print(f"访问错误: {e}")

    # 方式3：安全访问（推荐）
    print("\n安全访问方式：")
    db_name = getattr(setting_config.get('database', {}), 'db_name', 'default.db')
    app_port = getattr(setting_config.get('app', {}), 'port', 8000)
    print(f"数据库文件: {db_name}")
    print(f"应用端口: {app_port}")
